import datetime
from lunarcalendar import Converter, Solar, Lunar

# 小六壬六神含义（增强版）
LIU_SHEN_TABLE = {
    '大安': {
        '含义': '身未动时，属木青龙，凡谋事一五七',
        '运势': '吉',
        '事项': '宜静守、求财不利、官司和解、病情好转',
        '方位': '东方',
        '数字': (1,5,7),
        '颜色': '青色'
    },
    '留连': {
        '含义': '卒未归时，属水玄武，凡谋事二八十',
        '运势': '凶',
        '事项': '宜等待、防小人、求财难、病情缠绵',
        '方位': '北方',
        '数字': (2,8,10),
        '颜色': '黑色'
    },
    '速喜': {
        '含义': '人即至时，属火朱雀，凡谋事三六九',
        '运势': '吉',
        '事项': '宜速决、文书利、婚事成、病情愈',
        '方位': '南方',
        '数字': (3,6,9),
        '颜色': '红色'
    },
    '赤口': {
        '含义': '官事凶时，属金白虎，凡谋事四七十',
        '运势': '凶',
        '事项': '宜谨慎、防口舌、求财凶、病情危',
        '方位': '西方',
        '数字': (4,7,10),
        '颜色': '白色'
    },
    '小吉': {
        '含义': '人来喜时，属木六合，凡谋事一五七',
        '运势': '吉',
        '事项': '宜出行、求财利、婚事可、病情安',
        '方位': '东方',
        '数字': (1,5,7),
        '颜色': '青色'
    },
    '空亡': {
        '含义': '音信稀时，属土勾陈，凡谋事三六九',
        '运势': '凶',
        '事项': '宜推迟、事无成、求财空、病情凶',
        '方位': '中央',
        '数字': (3,6,9),
        '颜色': '黄色'
    }
}

def get_current_lunar_info():
    """获取精确的农历信息（含时辰）"""
    now = datetime.datetime.now()
    solar = Solar(now.year, now.month, now.day)
    lunar = Converter.Solar2Lunar(solar)
    
    # 精确计算时辰（考虑分钟）
    current_hour = now.hour + now.minute / 60

    # 根据时间段判断时辰（修正版）
    if current_hour >= 23 or current_hour < 1:
        shichen = '子'
    elif 1 <= current_hour < 3:
        shichen = '丑'
    elif 3 <= current_hour < 5:
        shichen = '寅'
    elif 5 <= current_hour < 7:
        shichen = '卯'
    elif 7 <= current_hour < 9:
        shichen = '辰'
    elif 9 <= current_hour < 11:
        shichen = '巳'
    elif 11 <= current_hour < 13:
        shichen = '午'
    elif 13 <= current_hour < 15:
        shichen = '未'
    elif 15 <= current_hour < 17:
        shichen = '申'
    elif 17 <= current_hour < 19:
        shichen = '酉'
    elif 19 <= current_hour < 21:
        shichen = '戌'
    elif 21 <= current_hour < 23:
        shichen = '亥'
    else:  # 这个分支理论上不会被执行，为了完整性保留
        shichen = '子'
    
    return lunar.month, lunar.day, shichen

def traditional_liuren_calc(lunar_month, lunar_day, shichen):
    """正统三传计算方法（月→日→时）"""
    liu_shen = ['大安', '留连', '速喜', '赤口', '小吉', '空亡']
    
    # 第一传：月（正月从大安开始）
    month_index = (lunar_month - 1) % 6
    month_result = liu_shen[month_index]
    
    # 第二传：日（从月落宫开始数日数）
    day_start_index = month_index
    day_index = (day_start_index + lunar_day - 1) % 6
    day_result = liu_shen[day_index]
    
    # 第三传：时（从日落宫开始数时辰数）
    shichen_num = ['子', '丑', '寅', '卯', '辰', '巳', 
                  '午', '未', '申', '酉', '戌', '亥'].index(shichen) + 1
    hour_index = (day_index + shichen_num - 1) % 6
    hour_result = liu_shen[hour_index]
    
    return {
        '月传': month_result,
        '日传': day_result,
        '时传': hour_result,
        '最终': hour_result
    }

def main():
    try:
        print("="*50)
        print("传统小六壬测算工具（三传正统算法）")
        print("="*50)
        
        # 获取精确农历信息
        lunar_month, lunar_day, shichen = get_current_lunar_info()
        
        # 计算三传结果
        result = traditional_liuren_calc(lunar_month, lunar_day, shichen)
        detail = LIU_SHEN_TABLE[result['最终']]
        
        # 输出结果
        current_time = datetime.datetime.now().strftime("%Y年%m月%d日 %H:%M:%S")
        print(f"\n当前公历: {current_time}")
        print(f"农历: {lunar_month}月{lunar_day}日 {shichen}时")
        
        print("\n✦ 三传过程 ✦")
        print(f"月传（事体）: {result['月传']}")
        print(f"日传（经过）: {result['日传']}")
        print(f"时传（结果）: {result['最终']}")
        
        print("\n✦ 最终结果 ✦")
        print(f"六神: {result['最终']}（{detail['运势']}）")
        print(f"方位: {detail['方位']}")
        print(f"宜忌: {detail['事项']}")
        print(f"数字: {','.join(map(str,detail['数字']))}")
        print(f"详解: {detail['含义']}")
        
        print("\n提示：结果需结合具体事体综合判断")
        
    except Exception as e:
        print(f"错误: {e}")
        print("请确保已安装依赖库: pip install lunarcalendar")

if __name__ == "__main__":
    main()